package java_DesignPattern.CreatorPattern.SingletonPattern.lazy.method2;

/**
 * 单例设计模式
 * 懒汉式:方式2(线程安全)
 * 双重检查锁
 */
public class Singleton {

    //声明一个静态变量来存储单例实例---->volatile关键字确保多线程环境下的可见性和有序性
    private static volatile Singleton singleton;

    //构造方法私有化,防止外部直接实例化
    private Singleton() {
    }

    //提供一个全局访问点,用于获取单例实例
    public static Singleton getInstance(){
        //判断实例是否为null,无锁,第一次检查
        if(singleton == null){
            synchronized (Singleton.class){
                //判断实例是否为null,有锁,第二次检查
                if(singleton == null){
                    singleton = new Singleton();
                }
            }
        }
        return singleton;
    }
}
